import greenfoot.*;     //(World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.*;     //(Date)
/**
 * Clase Debil representa un segmento de piso que se caera con el tiempo
 * 
 * @author (Programacion Orientada A Objetos - Gonzalez Donat - Neri Andriano) 
 * @version (9/05/12)
 */
public class Debil extends Piso
{
    private Date cont;          //tiempo inicial para comenzar a contar
    private Date cont2;         //tiempo final
    private int tiempo;         //limite de tiempo antes de que el piso se caiga
    private boolean band;       //indica si el mono se encuentra en el piso
    private boolean tiembla;    //hace temblar el piso unos pixeles a la izquierda y derecha
    /**
     * Constructor para la clase Debil
     * @param rotacion (true para inclinacion en el sentido contrareloj
     *                  false para inclinacion en el sentido reloj)
     * @param m referencia al mono
     * @param t tiempo en decimas de segundo para que el piso se caiga
     */
    public Debil(boolean rotacion,Mono m,int t)
    {
        super(rotacion,m);
        cont = null;
        cont2 = null;
        tiempo = t;
        band = false;
        tiembla = false;
    }
    /**
     * Constructor para la clase Debil
     * @param m referencia al mono
     * @param t tiempo en decimas de segundo para que el piso se caiga
     */
    public Debil(Mono m, int t)
    {
        super(m);
        cont = null;
        cont2 = null;
        tiempo = t;
        band = false;
        tiembla = false;
    }
    /**
     * Metodo que llama a evalua y a borrar continuamente 
     * para realizar laa acciones correspondientes
     */
    public void act() 
    {
        this.evalua();
        this.borrate();
    }    
    /**
     * verifica si el mono se encuentra en el piso 
     * y hace las acciones correspondientes
     */
    public void evalua()
    {
        if(this.intersects(mono) || band){
            if(cont == null)
                cont = new Date();
            else
                this.teCaes();
        }
        if(!this.intersects(mono) && !band)
            cont = null;
    }
    /**
     * Si este llego a la parte inferior del escenario
     * se elimina
     */
    public void borrate()
    {
        if(this.getY()>=this.getWorld().getHeight()-10)
            ((Escenario)this.getWorld()).elimina(this);
    }
    /**
     * Verifica si debe temblar o si el tiempo 
     * llega al limite lo comienza a dejar caer
     */
    public void teCaes()
    {
        cont2 = new Date();
        if(((cont2.getTime()-cont.getTime())/100) >= tiempo){
            this.setLocation(this.getX(),this.getY()+10);
            band = true;
        }
        else{
            if(tiembla){
                this.setLocation(this.getX()+2,this.getY());
                tiembla=false;
            }
            else{
                this.setLocation(this.getX()-2,this.getY());
                tiembla = true;
            }
        }
    }
}